package com.suke.czx.modules.task.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.suke.czx.modules.task.entity.Task;
import com.suke.czx.modules.task.entity.TaskSearchBo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 应用模块名称: 任务
 * 代码描述: 任务持久层
 * copyright: AUZAR ALL RIGHTS RESERVED
 * company: AUZAR
 *
 * @author: 颜米晨
 * @date: 2021/09/11 17:29
 */
public interface TaskMapper extends BaseMapper<Task> {

    /**
     * 获取一级任务总记录数
     * @param taskSearchBo 查询BO
     * @return 一级任务总记录数
     */
    Integer countParentTask(TaskSearchBo taskSearchBo);

    /**
     * 分页查询任务列表
     * @param taskSearchBo 查询BO
     * @param from 偏移量
     * @param limit 返回最大记录数
     * @return 任务数据集
     */
    List<Task> pageTaskList(@Param("taskSearchBo") TaskSearchBo taskSearchBo, @Param("from") Integer from, @Param("limit") Integer limit);

    /**
     * 校验该任务是否为存在子任务
     * @param taskId 任务编码
     * @return 父任务关联的子任务记录数
     */
    Integer getIfHasChildrenTask(Long taskId);

    /**
     * 删除任务
     * @param taskId 任务编码
     * @param userId 操作者编码
     */
    void updateDelTask(@Param("taskId") Long taskId, @Param("userId") Long userId);

    /**
     * 二级任务状态
     * @param taskId 任务编码
     * @param taskLevel 任务级别
     * @param progress 二级任务状态
     * @param userId 操作者编码
     */
    void updateTaskProgress(@Param("taskId") Long taskId, @Param("taskLevel") Integer taskLevel,
                            @Param("progress") Integer progress, @Param("userId") Long userId);

    /**
     * 三级任务状态
     * @param taskId 任务编码
     * @param taskLevel 任务级别
     * @param status 三级任务状态
     * @param userId 操作者编码
     */
    void updateTaskStatus(@Param("taskId") Long taskId, @Param("taskLevel") Integer taskLevel,
                          @Param("status") Integer status, @Param("userId") Long userId);

}